#include "Fifo.h"

Fifo::Fifo(std::string nombre) {
	this->nombre = nombre;
	// se crea el fifo
	mknod(nombre.c_str(), S_IFIFO | 0770, 0);
	// se inicializa el descriptor en -1
	this->fileDes = -1;
}
Fifo::~Fifo() {
}

int Fifo::escribir(const char *dato, int datoSize) {
	// se abre el file descriptor para escritura
	if (this->fileDes == -1)
		this->fileDes = open(this->nombre.c_str(), O_WRONLY);
	// se escriben los datos en el fifo
	int resultado = write(this->fileDes, (const void*) dato, datoSize);
	return resultado;
}

int Fifo::leer(char *buffer, int buffSize) {
	// se abre el file descriptor para lectura
	if (this->fileDes == -1)
		this->fileDes = open(this->nombre.c_str(), O_RDONLY);
	// se leen los datos del fifo
	int resultado = read(this->fileDes, (void*) buffer, buffSize);
	return resultado;
}

std::string Fifo::getNombre(){
	return this->nombre;
}

void Fifo::cerrar() {
	if (this->fileDes != -1)
		close(this->fileDes);

	unlink(this->nombre.c_str());
}
